home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume22 / ecu / patch05d < prev    next >
Encoding:
Text File  |  1991-09-04  |  49.9 KB  |  1,589 lines

  1. Newsgroups: comp.sources.misc
  2. From: Warren Tucker <wht@n4hgf.GA.US>
  3. Subject:  v22i093:  ecu - ECU async comm package rev 3.10, Patch05d/5
  4. Message-ID: <1991Sep4.160242.28439@sparky.IMD.Sterling.COM>
  5. X-Md4-Signature: 25c70fa7a94676b4fdbae34128b4009c
  6. Date: Wed, 4 Sep 1991 16:02:42 GMT
  7. Approved: kent@sparky.imd.sterling.com
  8.  
  9. Submitted-by: Warren Tucker <wht@n4hgf.GA.US>
  10. Posting-number: Volume 22, Issue 93
  11. Archive-name: ecu/patch05d
  12. Environment: SCO, XENIX, ISC, SUNOS4.1, SYSVR4
  13. Patch-To: ecu: Volume 21, Issue 53-89
  14.  
  15. #!/bin/sh
  16. # this is p5.04 (part 4 of ecu/patch05)
  17. # do not concatenate these parts, unpack them in order with /bin/sh
  18. # file PATCH5.01 continued
  19. #
  20. if test ! -r _shar_seq_.tmp; then
  21.     echo 'Please unpack part 1 first!'
  22.     exit 1
  23. fi
  24. (read Scheck
  25.  if test "$Scheck" != 4; then
  26.     echo Please unpack part "$Scheck" next!
  27.     exit 1
  28.  else
  29.     exit 0
  30.  fi
  31. ) < _shar_seq_.tmp || exit 1
  32. if test ! -f _shar_wnt_.tmp; then
  33.     echo 'x - still skipping PATCH5.01'
  34. else
  35. echo 'x - continuing file PATCH5.01'
  36. sed 's/^X//' << 'SHAR_EOF' >> 'PATCH5.01' &&
  37. X  /*+:EDITS:*/
  38. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by slootman@dri.nl */
  39. X  /*:08-23-1991-18:33-wht@n4hgf2-disable force no curses for tty vs. line speed */
  40. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  41. X  /*:12-04-1990-05:36-wht-creation */
  42. X--- 6,12 ----
  43. X  which does not get along with termio.h AT ALL
  44. X  --------------------------------------------------------------------------*/
  45. X  /*+:EDITS:*/
  46. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by aega84!lh */
  47. X  /*:08-23-1991-18:33-wht@n4hgf2-disable force no curses for tty vs. line speed */
  48. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  49. X  /*:12-04-1990-05:36-wht-creation */
  50. X*** /export/home/wht/src/ecu314/z/ecurz.c    Wed Sep  4 00:25:16 1991
  51. X--- z/ecurz.c    Mon Sep  2 02:03:49 1991
  52. X***************
  53. X*** 1,4 ****
  54. X! char *numeric_revision = "ecurz 3.14";
  55. X  /*+-------------------------------------------------------------------------
  56. X      ecurz.c - X/Y/ZMODEM receive program
  57. X    Derived from public domain source by Chuck Forsberg, Omen Technologies
  58. X--- 1,4 ----
  59. X! char *numeric_revision = "ecurz 3.15";
  60. X  /*+-------------------------------------------------------------------------
  61. X      ecurz.c - X/Y/ZMODEM receive program
  62. X    Derived from public domain source by Chuck Forsberg, Omen Technologies
  63. X***************
  64. X*** 57,63 ****
  65. X  
  66. X  --------------------------------------------------------------------------*/
  67. X  /*+:EDITS:*/
  68. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by slootman@dri.nl */
  69. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  70. X  /*:04-30-1991-18:33-wht@n4hgf-gcc version coredumping on putc(); use fputc() */
  71. X  /*:03-27-1991-21:21-wht@n4hgf-dont bump error count on send ZRPOS */
  72. X--- 57,63 ----
  73. X  
  74. X  --------------------------------------------------------------------------*/
  75. X  /*+:EDITS:*/
  76. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by aega84!lh */
  77. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  78. X  /*:04-30-1991-18:33-wht@n4hgf-gcc version coredumping on putc(); use fputc() */
  79. X  /*:03-27-1991-21:21-wht@n4hgf-dont bump error count on send ZRPOS */
  80. X*** /export/home/wht/src/ecu314/z/ecusz.c    Wed Sep  4 00:25:16 1991
  81. X--- z/ecusz.c    Sun Sep  1 21:15:07 1991
  82. X***************
  83. X*** 1,4 ****
  84. X! char *numeric_revision = "ecusz 3.14";
  85. X  #define BUFFERED_WRITE
  86. X  /*+-------------------------------------------------------------------------
  87. X      ecusz.c - X/Y/ZMODEM send program
  88. X--- 1,4 ----
  89. X! char *numeric_revision = "ecusz 3.15";
  90. X  #define BUFFERED_WRITE
  91. X  /*+-------------------------------------------------------------------------
  92. X      ecusz.c - X/Y/ZMODEM send program
  93. X***************
  94. X*** 66,72 ****
  95. X  
  96. X  --------------------------------------------------------------------------*/
  97. X  /*+:EDITS:*/
  98. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by slootman@dri.nl */
  99. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  100. X  /*:02-03-1991-17:27-wht@n4hgf-version number change - see zcurses.c */
  101. X  /*:12-18-1990-21:26-wht@n4hgf-better output control */
  102. X--- 66,74 ----
  103. X  
  104. X  --------------------------------------------------------------------------*/
  105. X  /*+:EDITS:*/
  106. X! /*:09-01-1991-14:18-wht@n4hgf2-improve sun flushline */
  107. X! /*:08-29-1991-02:17-wht@n4hgf2-flush "rz" to line before nap */
  108. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by aega84!lh */
  109. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  110. X  /*:02-03-1991-17:27-wht@n4hgf-version number change - see zcurses.c */
  111. X  /*:12-18-1990-21:26-wht@n4hgf-better output control */
  112. X***************
  113. X*** 465,483 ****
  114. X      xsendline(ch);
  115. X  }    /* end of sendline */
  116. X  
  117. X  flushline()
  118. X  {
  119. X  struct termio tio;
  120. X  #ifdef BUFFERED_WRITE
  121. X      fflush(iofp);
  122. X  #endif
  123. X      ioctl(iofd,TCGETA,(char *)&tio);
  124. X      ioctl(iofd,TCSETAW,(char *)&tio);
  125. X! }
  126. X  
  127. X  main(argc,argv)
  128. X  int argc;
  129. X! char *argv[];
  130. X  {
  131. X  register char *cp;
  132. X  char **patts = paths;
  133. X--- 467,512 ----
  134. X      xsendline(ch);
  135. X  }    /* end of sendline */
  136. X  
  137. X+ /*+-------------------------------------------------------------------------
  138. X+     flushline() - ensure all queued data to line is on the wire
  139. X+ --------------------------------------------------------------------------*/
  140. X+ void
  141. X  flushline()
  142. X  {
  143. X+ #if defined(sun)
  144. X+ int retries = 50;
  145. X+ int outq_count;
  146. X+ int old_outq_count = 0;
  147. X+ #else
  148. X  struct termio tio;
  149. X+ #endif
  150. X+ 
  151. X  #ifdef BUFFERED_WRITE
  152. X      fflush(iofp);
  153. X  #endif
  154. X+ 
  155. X+ #if defined(sun)
  156. X+     do {
  157. X+         ioctl(iofd,TIOCOUTQ,&outq_count);
  158. X+         if(!outq_count)
  159. X+             break;
  160. X+         if(old_outq_count == outq_count) /* don't hang if flow control lock */
  161. X+             retries--;
  162. X+         old_outq_count = outq_count;
  163. X+         Nap(50);
  164. X+     } while(outq_count && retries);
  165. X+ #else
  166. X      ioctl(iofd,TCGETA,(char *)&tio);
  167. X      ioctl(iofd,TCSETAW,(char *)&tio);
  168. X! #endif
  169. X! }    /* end of flushline */
  170. X  
  171. X+ /*+-------------------------------------------------------------------------
  172. X+     main(argc,argv)
  173. X+ --------------------------------------------------------------------------*/
  174. X  main(argc,argv)
  175. X  int argc;
  176. X! char **argv;
  177. X  {
  178. X  register char *cp;
  179. X  char **patts = paths;
  180. X***************
  181. X*** 702,708 ****
  182. X              write(iofd,"rz\r",3);
  183. X          else    /* wht -- why not? */
  184. X              write(iofd,"rb\r",3);        /* wht */
  185. X!         Nap(2000L);
  186. X          report_str("",-1);
  187. X          if(!Nozmodem)
  188. X          {
  189. X--- 731,738 ----
  190. X              write(iofd,"rz\r",3);
  191. X          else    /* wht -- why not? */
  192. X              write(iofd,"rb\r",3);        /* wht */
  193. X!         flushline();
  194. X!         Nap(750L);
  195. X          report_str("",-1);
  196. X          if(!Nozmodem)
  197. X          {
  198. X***************
  199. X*** 727,733 ****
  200. X          Exitcode = 253;
  201. X      exit(Exitcode ? Exitcode : (skip_count > 127) ? 127 : skip_count);
  202. X      /*NOTREACHED*/
  203. X! }
  204. X  
  205. X  /*+-------------------------------------------------------------------------
  206. X      wcsend(argc,argp) -- send group of files
  207. X--- 757,764 ----
  208. X          Exitcode = 253;
  209. X      exit(Exitcode ? Exitcode : (skip_count > 127) ? 127 : skip_count);
  210. X      /*NOTREACHED*/
  211. X! }    /* end of main */
  212. X! 
  213. X  
  214. X  /*+-------------------------------------------------------------------------
  215. X      wcsend(argc,argp) -- send group of files
  216. X*** /export/home/wht/src/ecu314/z/zcommon.c    Wed Sep  4 00:25:17 1991
  217. X--- z/zcommon.c    Mon Sep  2 02:38:48 1991
  218. X***************
  219. X*** 16,30 ****
  220. X--- 16,36 ----
  221. X  
  222. X  --------------------------------------------------------------------------*/
  223. X  /*+:EDITS:*/
  224. X+ /*:08-30-1991-20:09-wht@n4hgf2-sun Nap was not returning a value */
  225. X+ /*:08-30-1991-02:34-jdeitch@jadpc.cts.com-fix no hzmsec */
  226. X  /*:08-21-1991-06:23-wht@n4hgf-sun porting */
  227. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  228. X  /*:08-14-1990-20:40-wht@n4hgf-ecu3.00-flush old edit history */
  229. X  
  230. X  #include <stdio.h>
  231. X+ #include <errno.h>
  232. X  #include <signal.h>
  233. X  #include <setjmp.h>
  234. X  #include <ctype.h>
  235. X  #include <pwd.h>
  236. X+ #include <sys/types.h>
  237. X+ #include <sys/param.h>
  238. X+ #include <pwd.h>
  239. X  #include "zmodem.h"
  240. X  
  241. X  #if defined(sun) || defined(SVR4)
  242. X***************
  243. X*** 188,193 ****
  244. X--- 194,200 ----
  245. X   *  Return non 0 iff something to read from io descriptor f
  246. X   */
  247. X  rdchk(f)
  248. X+ int f;
  249. X  {
  250. X      static long lf;
  251. X  
  252. X***************
  253. X*** 465,494 ****
  254. X  As it is nap() is nearly useless.  I believe select() suffers
  255. X  from the same deficiency (< 1000 msec timeout becomes 1000 msec) but
  256. X  I haven't "proven" it yet.
  257. X  --------------------------------------------------------------------------*/
  258. X  long
  259. X  Nap(msec)
  260. X  long msec;
  261. X  {
  262. X! #if defined(sun) || defined(SVR4)
  263. X  struct timeval timer;
  264. X!     timer.tv_sec = 0;
  265. X!     timer.tv_usec = 1000L * msec;
  266. X!     select(0,0,0,0,&timer);
  267. X  #else
  268. X  #if defined(M_XENIX) || defined(WORKING_UNIX_NAP)
  269. X      return(nap(msec));
  270. X  #else
  271. X! #ifdef NEED_SHORT_INTERVALS    /* borrow hzmsec setup from ecu.c if need to >*/
  272. X      if(msec < hzmsec)
  273. X          msec = hzmsec;
  274. X- #endif
  275. X      if(nap(msec) < 0)
  276. X          return(-1);
  277. X      return(msec);
  278. X  #endif /* defined(M_XENIX) || defined(WORKING_UNIX_NAP) */
  279. X  #endif /* sun */
  280. X  
  281. X  }    /* end of Nap */
  282. X  /* end of zcommon.c */
  283. X  /* vi: set tabstop=4 shiftwidth=4: */
  284. X--- 472,518 ----
  285. X  As it is nap() is nearly useless.  I believe select() suffers
  286. X  from the same deficiency (< 1000 msec timeout becomes 1000 msec) but
  287. X  I haven't "proven" it yet.
  288. X+ 
  289. X+ On the sun, we use select to accomplish the nap requirement.
  290. X  --------------------------------------------------------------------------*/
  291. X  long
  292. X  Nap(msec)
  293. X  long msec;
  294. X  {
  295. X! #if defined(sun)
  296. X  struct timeval timer;
  297. X!     timer.tv_sec = msec / 1000;
  298. X!     timer.tv_usec = (msec % 1000L) * 1000L;
  299. X!     if(select(32,0,0,0,&timer) < 0)
  300. X!         return(-1);
  301. X!     return(msec);
  302. X  #else
  303. X  #if defined(M_XENIX) || defined(WORKING_UNIX_NAP)
  304. X      return(nap(msec));
  305. X  #else
  306. X! #if defined(M_UNIX) || defined(ISC) || defined(SVR4)
  307. X! static ulong hzmsec = 0L;
  308. X!     if(!hzmsec) /* learn tick rate for various timers */
  309. X!     {
  310. X!         int hz;
  311. X!         if(getenv("HZ"))
  312. X!             hz = atoi(getenv("HZ"));
  313. X!         else
  314. X!             hz = HZ;
  315. X!         hzmsec = (ulong)(1000 / hz) + 2;
  316. X!     }
  317. X      if(msec < hzmsec)
  318. X          msec = hzmsec;
  319. X      if(nap(msec) < 0)
  320. X          return(-1);
  321. X      return(msec);
  322. X+ #else
  323. X+ # include "porting.attion.needed.here"
  324. X+ #endif /* defined(M_UNIX) || defined(ISC) || defined(SVR4) */
  325. X  #endif /* defined(M_XENIX) || defined(WORKING_UNIX_NAP) */
  326. X  #endif /* sun */
  327. X  
  328. X  }    /* end of Nap */
  329. X+ 
  330. X  /* end of zcommon.c */
  331. X  /* vi: set tabstop=4 shiftwidth=4: */
  332. X*** /export/home/wht/src/ecu314/z/zcurses.c    Wed Sep  4 00:25:17 1991
  333. X--- z/zcurses.c    Mon Sep  2 20:39:49 1991
  334. X***************
  335. X*** 18,26 ****
  336. X  12|  _55____________________________________________________ |  comment str
  337. X  13|  _55____________________________________________________ |  remote info
  338. X  14`----------------------------------------------------------'
  339. X! 14|  FE ___ OE ___ rcvd ________ xmtd ________ RTS _ CTS _
  340. X  15|  flow xmtr CTS ____ XOFF ____ rcvr RTS ____ XOFF ____
  341. X  
  342. X    Defined functions:
  343. X      clear_area(win,row,col,len)
  344. X      clear_area_char(win,row,col,len,fillchar)
  345. X--- 18,31 ----
  346. X  12|  _55____________________________________________________ |  comment str
  347. X  13|  _55____________________________________________________ |  remote info
  348. X  14`----------------------------------------------------------'
  349. X! 
  350. X! 14|  FE ___ OE ___ rcvd ________ xmtd ________ RTS _ CTS _      FASI
  351. X  15|  flow xmtr CTS ____ XOFF ____ rcvr RTS ____ XOFF ____
  352. X+ 16|  queues: xmtr _____ of _____  rcvr _____ of _____
  353. X  
  354. X+ 14|  Output queue depth  ______  RTS _  CTS _                   sun
  355. X+ 15|  Input queue depth   ______  Input queue avail ______ 
  356. X+ 
  357. X    Defined functions:
  358. X      clear_area(win,row,col,len)
  359. X      clear_area_char(win,row,col,len,fillchar)
  360. X***************
  361. X*** 60,66 ****
  362. X  
  363. X  ------------------------------------------------------------------------*/
  364. X  /*+:EDITS:*/
  365. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by slootman@dri.nl */
  366. X  /*:08-23-1991-18:33-wht@n4hgf2-disable force no curses for tty vs. line speed */
  367. X  /*:08-21-1991-06:23-wht@n4hgf-sun porting */
  368. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  369. X--- 65,72 ----
  370. X  
  371. X  ------------------------------------------------------------------------*/
  372. X  /*+:EDITS:*/
  373. X! /*:09-02-1991-01:12-wht@n4hgf2-show sun driver information */
  374. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by aega84!lh */
  375. X  /*:08-23-1991-18:33-wht@n4hgf2-disable force no curses for tty vs. line speed */
  376. X  /*:08-21-1991-06:23-wht@n4hgf-sun porting */
  377. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  378. X***************
  379. X*** 86,92 ****
  380. X  #if defined(M_SYSV)
  381. X  #   include <sys/machdep.h>
  382. X  #else
  383. X! #if defined(ISC)
  384. X  #  include <sys/at_ansi.h>
  385. X  #  include <sys/kd.h>
  386. X  #endif
  387. X--- 92,98 ----
  388. X  #if defined(M_SYSV)
  389. X  #   include <sys/machdep.h>
  390. X  #else
  391. X! #if defined(ISC) || defined(SVR4)
  392. X  #  include <sys/at_ansi.h>
  393. X  #  include <sys/kd.h>
  394. X  #endif
  395. X***************
  396. X*** 113,122 ****
  397. X--- 119,133 ----
  398. X  unsigned char sHR = at_HR;
  399. X  
  400. X  #if defined(FASI)
  401. X+ #define WIN_LINES    18
  402. X+ #else
  403. X+ #if defined(sun)
  404. X  #define WIN_LINES    17
  405. X  #else
  406. X  #define WIN_LINES    15
  407. X+ #endif    /* sun */
  408. X  #endif    /* FASI */
  409. X+ 
  410. X  #define WIN_COLS    60
  411. X  #define WIN_TOPY    2
  412. X  #define WIN_LEFTX    8
  413. X***************
  414. X*** 128,133 ****
  415. X--- 139,145 ----
  416. X  extern int force_no_curses;
  417. X  extern int skip_count;
  418. X  extern int npats;
  419. X+ extern int iofd;
  420. X  extern long rxpos;
  421. X  extern int log_packets;
  422. X  extern long Txpos;
  423. X***************
  424. X*** 179,185 ****
  425. X--- 191,202 ----
  426. X  #if defined(FASI)
  427. X    "  FE ___ OE ___ rcvd ________ xmtd ________ RTS _ CTS _   ",
  428. X    "  flow xmtr CTS ____ XOFF ____ rcvr RTS ____ XOFF ____    ",
  429. X+   "  queues: xmtr _____ of _____  rcvr _____ of _____        ",
  430. X  #endif    /* FASI */
  431. X+ #if defined(sun)
  432. X+   "  Output queue depth  ______  RTS _  CTS _                ",
  433. X+   "  Input queue depth   ______  Input queue avail ______    ",
  434. X+ #endif
  435. X  /*`----------------------------------------------------------' */
  436. X  (char *)0
  437. X  };
  438. X***************
  439. X*** 277,283 ****
  440. X          case S_IFBLK:    *rtn = 'b'; break; /* block special */
  441. X          case S_IFREG:    *rtn = '-'; break; /* regular */
  442. X  
  443. X! #if defined(BSD)
  444. X          case S_IFLNK:    *rtn = 'l'; break; /* symbolic link */
  445. X          case S_IFSOCK:    *rtn = 's'; break; /* socket */
  446. X  #endif
  447. X--- 294,300 ----
  448. X          case S_IFBLK:    *rtn = 'b'; break; /* block special */
  449. X          case S_IFREG:    *rtn = '-'; break; /* regular */
  450. X  
  451. X! #if defined(BSD) || defined(SVR4)
  452. X          case S_IFLNK:    *rtn = 'l'; break; /* symbolic link */
  453. X          case S_IFSOCK:    *rtn = 's'; break; /* socket */
  454. X  #endif
  455. X***************
  456. X*** 529,535 ****
  457. X  int
  458. X  determine_output_mode()
  459. X  {
  460. X! #if defined(M_UNIX) || defined(ISC) || defined(M_XENIX)
  461. X      int monitor_type;
  462. X  #endif
  463. X      struct stat dn;
  464. X--- 546,552 ----
  465. X  int
  466. X  determine_output_mode()
  467. X  {
  468. X! #if defined(M_UNIX) || defined(ISC) || defined(M_XENIX) || defined(SVR4)
  469. X      int monitor_type;
  470. X  #endif
  471. X      struct stat dn;
  472. X***************
  473. X*** 546,552 ****
  474. X          return(1);
  475. X      }
  476. X  
  477. X! #if defined(M_UNIX) || defined(ISC) || defined(M_XENIX)
  478. X      if(ioctl(0,CONS_GET,&monitor_type) < 0)    /* not multiscreen */
  479. X      {
  480. X  #endif
  481. X--- 563,569 ----
  482. X          return(1);
  483. X      }
  484. X  
  485. X! #if defined(M_UNIX) || defined(ISC) || defined(M_XENIX) || defined(SVR4)
  486. X      if(ioctl(0,CONS_GET,&monitor_type) < 0)    /* not multiscreen */
  487. X      {
  488. X  #endif
  489. X***************
  490. X*** 599,605 ****
  491. X  #ifdef TTY_VS_LINE_SPEED_NO_CURSES
  492. X          test_tty_and_line_baud();
  493. X  #endif
  494. X! #if defined(M_UNIX) || defined(ISC) || defined(M_XENIX)
  495. X      }
  496. X  #endif
  497. X  
  498. X--- 616,622 ----
  499. X  #ifdef TTY_VS_LINE_SPEED_NO_CURSES
  500. X          test_tty_and_line_baud();
  501. X  #endif
  502. X! #if defined(M_UNIX) || defined(ISC) || defined(M_XENIX) || defined(SVR4)
  503. X      }
  504. X  #endif
  505. X  
  506. X***************
  507. X*** 631,639 ****
  508. X          return;
  509. X  
  510. X  #if defined(FASI)
  511. X-     { extern int iofd;
  512. X          (void)ioctl(iofd,FASIC_SIP,&fip_start);
  513. X-     }
  514. X  #endif /* FASI */
  515. X  
  516. X      if(!initscr())
  517. X--- 648,654 ----
  518. X***************
  519. X*** 647,656 ****
  520. X--- 662,673 ----
  521. X      report_init_complete = 1;
  522. X      win = newwin(WIN_LINES,WIN_COLS,WIN_TOPY,WIN_LEFTX);
  523. X      box(win,sVR,sHR);
  524. X+ #ifndef SVR4
  525. X      wmove(win,0,0); waddch(win,sTL);
  526. X      wmove(win,win->_maxy - 1,0); waddch(win,sBL);
  527. X      wmove(win,win->_maxy - 1,win->_maxx - 1); waddch(win,sBR);
  528. X      wmove(win,0,win->_maxx - 1); waddch(win,sTR);
  529. X+ #endif
  530. X      wmove(win,0,2);
  531. X      wstandout(win);
  532. X      waddch(win,'[');
  533. X***************
  534. X*** 660,667 ****
  535. X--- 677,689 ----
  536. X      waddch(win,' ');
  537. X      waddch(win,']');
  538. X      wstandend(win);
  539. X+ #ifdef SVR4
  540. X+     whline(win, (unsigned long)(sHR & 0x00ff), 2);
  541. X+     wmove(win,0, 8 + strlen(title));
  542. X+ #else
  543. X      waddch(win,sHR);
  544. X      waddch(win,sHR);
  545. X+ #endif
  546. X      waddch(win,' ');
  547. X      itmp = WIN_COLS - 2 - 7 - strlen(title);
  548. X      curr_dir[itmp] = 0;
  549. X***************
  550. X*** 841,846 ****
  551. X--- 863,879 ----
  552. X    xmtr XOFF count:        row 15 col 28 len 4
  553. X    rcvr CTS count:         row 15 col 42 len 4
  554. X    rcvr XOFF count:        row 15 col 52 len 4
  555. X+   xmtr queue depth        row 16 col 16 len 5
  556. X+   xmtr queue size         row 16 col 25 len 5 (one time)
  557. X+   rcvr queue depth        row 16 col 37 len 5
  558. X+   rcvr queue size         row 16 col 46 len 5 (one time)
  559. X+ 
  560. X+ If sun,
  561. X+   output queue depth      row 14 col 23 len 6
  562. X+   RTS status              row 14 col 35 len 1
  563. X+   CTS status              row 14 col 42 len 1
  564. X+   input queue depth       row 15 col 23 len 6
  565. X+   input queue avail       row 15 col 49 len 6
  566. X  --------------------------------------------------------------------------*/
  567. X  report_rx_tx_count()
  568. X  {
  569. X***************
  570. X*** 849,856 ****
  571. X  #if defined(FASI)
  572. X      unsigned long ltmp;
  573. X      struct fas_info now;
  574. X-     extern int iofd;
  575. X  #endif    /* FASI */
  576. X  
  577. X      register char *cptr;
  578. X  
  579. X--- 882,894 ----
  580. X  #if defined(FASI)
  581. X      unsigned long ltmp;
  582. X      struct fas_info now;
  583. X  #endif    /* FASI */
  584. X+ #if defined(sun)
  585. X+ uint output_queue;
  586. X+ uint input_avail;
  587. X+ uint input_size;
  588. X+ uint modem_lines;
  589. X+ #endif
  590. X  
  591. X      register char *cptr;
  592. X  
  593. X***************
  594. X*** 886,891 ****
  595. X--- 924,930 ----
  596. X  #if defined(FASI)
  597. X      if(!ioctl(iofd,FASIC_SIP,&now))
  598. X      {
  599. X+     static int statics = 0;    /* one time display flag */
  600. X          if((ltmp = now.framing_errors - fip_start.framing_errors) > 999L)
  601. X              ltmp = 999L;
  602. X          sprintf(s128,"%-3lu",ltmp);
  603. X***************
  604. X*** 941,948 ****
  605. X--- 980,1049 ----
  606. X          sprintf(s128,"%-4lu",ltmp);
  607. X          wmove(win,15,51);
  608. X          waddstr(win,s128);
  609. X+ 
  610. X+         if(now.xmit_ring_cnt > 99999)
  611. X+             now.xmit_ring_cnt = 99999;
  612. X+         sprintf(s128,"%-5u",now.xmit_ring_cnt);
  613. X+         wmove(win,16,16);
  614. X+         waddstr(win,s128);
  615. X+ 
  616. X+         if(now.recv_ring_cnt > 99999)
  617. X+             now.recv_ring_cnt = 99999;
  618. X+         sprintf(s128,"%-5u",now.recv_ring_cnt);
  619. X+         wmove(win,16,37);
  620. X+         waddstr(win,s128);
  621. X+ 
  622. X+         if(!statics)
  623. X+         {
  624. X+             statics = 1;
  625. X+             ltmp = XMIT_BUFF_SIZE;
  626. X+             if(ltmp > 99999)
  627. X+                 ltmp = 99999;
  628. X+             sprintf(s128,"%-5lu",ltmp);
  629. X+             wmove(win,16,25);
  630. X+             waddstr(win,s128);
  631. X+ 
  632. X+             ltmp = RECV_BUFF_SIZE;
  633. X+             if(ltmp > 99999)
  634. X+                 ltmp = 99999;
  635. X+             sprintf(s128,"%-5lu",ltmp);
  636. X+             wmove(win,16,46);
  637. X+             waddstr(win,s128);
  638. X+         }
  639. X      }
  640. X  #endif    /* FASI */
  641. X+ 
  642. X+ #if defined(sun)
  643. X+     output_queue = 0;
  644. X+     ioctl(iofd,TIOCOUTQ,(int *)&output_queue);
  645. X+     if(output_queue > 999999)
  646. X+         output_queue = 999999;
  647. X+     sprintf(s128,"%6u",output_queue);
  648. X+     wmove(win,14,23);
  649. X+     waddstr(win,s128);
  650. X+ 
  651. X+     modem_lines = 0;
  652. X+     ioctl(iofd,TIOCMGET,(int *)&modem_lines);
  653. X+     wmove(win,14,35);
  654. X+     waddch(win,(modem_lines & TIOCM_RTS) ? 'T' : 'F');
  655. X+     wmove(win,14,42);
  656. X+     waddch(win,(modem_lines & TIOCM_CTS) ? 'T' : 'F');
  657. X+ 
  658. X+     input_size = 0;
  659. X+     input_avail = 0;
  660. X+     ioctl(iofd,TIOCISPACE,(int *)&input_avail);
  661. X+     ioctl(iofd,TIOCISIZE,(int *)&input_size);
  662. X+     if(input_size > 999999)
  663. X+         input_size = 999999;
  664. X+     if(input_avail > 999999)
  665. X+         input_avail = 999999;
  666. X+     sprintf(s128,"%6u",input_size - input_avail);
  667. X+     wmove(win,15,23);
  668. X+     waddstr(win,s128);
  669. X+     sprintf(s128,"%6u",input_avail);
  670. X+     wmove(win,15,49);
  671. X+     waddstr(win,s128);
  672. X+ #endif
  673. X  
  674. X      report_window();
  675. X  
  676. X*** /export/home/wht/src/ecu314/z/zmodem.h    Wed Sep  4 00:25:17 1991
  677. X--- z/zmodem.h    Sun Sep  1 14:28:39 1991
  678. X***************
  679. X*** 2,8 ****
  680. X      zmodem.h -- common include filefor ecurz/ecusz
  681. X  --------------------------------------------------------------------------*/
  682. X  /*+:EDITS:*/
  683. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by slootman@dri.nl */
  684. X  /*:08-21-1991-06:23-wht@n4hgf-sun porting */
  685. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  686. X  /*:08-14-1990-20:41-wht@n4hgf-ecu3.00-flush old edit history */
  687. X--- 2,8 ----
  688. X      zmodem.h -- common include filefor ecurz/ecusz
  689. X  --------------------------------------------------------------------------*/
  690. X  /*+:EDITS:*/
  691. X! /*:08-28-1991-14:08-wht@n4hgf2-SVR4 cleanup by aega84!lh */
  692. X  /*:08-21-1991-06:23-wht@n4hgf-sun porting */
  693. X  /*:07-25-1991-12:59-wht@n4hgf-ECU release 3.10 */
  694. X  /*:08-14-1990-20:41-wht@n4hgf-ecu3.00-flush old edit history */
  695. X***************
  696. X*** 26,33 ****
  697. X  
  698. X  #include <sys/types.h>
  699. X  #include <sys/stat.h>
  700. X- #include <termio.h>
  701. X  #if defined(sun)
  702. X  #undef ECHO
  703. X  #undef NL0
  704. X  #undef NL1
  705. X--- 26,40 ----
  706. X  
  707. X  #include <sys/types.h>
  708. X  #include <sys/stat.h>
  709. X  #if defined(sun)
  710. X+ #include <termio.h>
  711. X+ #define termio termios
  712. X+ #undef TCGETA
  713. X+ #undef TCSETA
  714. X+ #undef TCSETAW
  715. X+ #define TCGETA    TCGETS
  716. X+ #define TCSETA    TCSETS
  717. X+ #define TCSETAW    TCSETSW
  718. X  #undef ECHO
  719. X  #undef NL0
  720. X  #undef NL1
  721. X***************
  722. X*** 47,53 ****
  723. X  #undef FLUSHO
  724. X  #undef PENDIN
  725. X  #undef NOFLSH
  726. X! #endif
  727. X  #include <sys/ioctl.h>
  728. X  #include <string.h>
  729. X  #define MODE2OK
  730. X--- 54,62 ----
  731. X  #undef FLUSHO
  732. X  #undef PENDIN
  733. X  #undef NOFLSH
  734. X! #else
  735. X! #include <termio.h>
  736. X! #endif /* sun */
  737. X  #include <sys/ioctl.h>
  738. X  #include <string.h>
  739. X  #define MODE2OK
  740. SHAR_EOF
  741. echo 'File PATCH5.01 is complete' &&
  742. chmod 0664 PATCH5.01 ||
  743. echo 'restore of PATCH5.01 failed'
  744. Wc_c="`wc -c < 'PATCH5.01'`"
  745. test 157812 -eq "$Wc_c" ||
  746.     echo 'PATCH5.01: original size 157812, current size' "$Wc_c"
  747. rm -f _shar_wnt_.tmp
  748. fi
  749. # ============= fasi/fas.h ==============
  750. if test ! -d 'fasi'; then
  751.     echo 'x - creating directory fasi'
  752.     mkdir 'fasi'
  753. fi
  754. if test -f 'fasi/fas.h' -a X"$1" != X"-c"; then
  755.     echo 'x - skipping fasi/fas.h (File already exists)'
  756.     rm -f _shar_wnt_.tmp
  757. else
  758. > _shar_wnt_.tmp
  759. echo 'x - extracting fasi/fas.h (Text)'
  760. sed 's/^X//' << 'SHAR_EOF' > 'fasi/fas.h' &&
  761. X/* This file contains various defines for the FAS async driver.
  762. X   If you change anything here you have to recompile the driver module.
  763. X*/
  764. X/*+:EDITS:*/
  765. X/*:07-25-1991-12:57-wht@n4hgf-ECU release 3.10 */
  766. X/*:06-04-1991-19:41-wht@n4hgf-add FASIC_SIP_CHANGE */
  767. X/*:01-20-1991-16:17-wht@n4hgf-add fas_names */
  768. X/*:01-20-1991-05:01-wht@n4hgf-changed buffer sizes */
  769. X
  770. X/* Alas, SCO idinstall has no -z (Define) option like ISC does */
  771. X#if !defined(FASI)
  772. X#define FASI
  773. X#endif
  774. X#if !defined(SCO)
  775. X#define SCO
  776. X#endif
  777. X
  778. X#if !defined (M_I286) && !defined(__STDC__)
  779. X#ident    "@(#)fas.h    2.08"
  780. X#endif
  781. X
  782. X/* Uncomment the following line if you need asyputchar and asygetchar.
  783. X   This is only required if you link the kernel without the original
  784. X   asy driver and these functions aren't provided by any other kernel
  785. X   module.
  786. X*/
  787. X/* #define NEED_PUT_GETCHAR    /* */
  788. X
  789. X/* Uncomment the following line if you have VP/ix support in the
  790. X   kernel.
  791. X*/
  792. X/* #define HAVE_VPIX    /* */
  793. X
  794. X/* Uncomment the following line if you need init8250. DosMerge needs
  795. X   this function, but only if you link the kernel without the original
  796. X   asy driver.
  797. X*/
  798. X/* #define NEED_INIT8250    /* */
  799. X
  800. X#if defined (VPIX)
  801. X#undef VPIX
  802. X#endif
  803. X
  804. X#if defined (HAVE_VPIX)
  805. X#define VPIX
  806. X#endif
  807. X
  808. X#if defined (XENIX)
  809. Xtypedef unsigned char    unchar;
  810. Xtypedef unsigned long    ulong;
  811. X/*
  812. X**    Union for use by all device handler ioctl routines.
  813. X*/
  814. Xunion ioctl_arg {
  815. X    struct termio    *stparg;    /* ptr to termio struct */
  816. X    char        *cparg;        /* ptr to character */
  817. X    char        carg;        /* character */
  818. X    int        *iparg;        /* ptr to integer */
  819. X    int        iarg;        /* integer */
  820. X    long            *lparg;         /* ptr to long */
  821. X    long            larg;           /* long */
  822. X};
  823. X#endif
  824. X
  825. X#if defined (TRUE)
  826. X#undef TRUE
  827. X#endif
  828. X#define    TRUE    (1)
  829. X
  830. X#if defined (FALSE)
  831. X#undef FALSE
  832. X#endif
  833. X#define FALSE    (0)
  834. X
  835. X/* Initial line control register.  Value will only be meaningful for
  836. X   asyputchar and asygetchar and they are only meaningful if
  837. X   NEED_PUT_GETCHAR is defined.
  838. X*/
  839. X#define    INITIAL_LINE_CONTROL    LC_WORDLEN_8
  840. X
  841. X/* Initial baud rate.  Value will only be meaningful for
  842. X   asyputchar and asygetchar and they are only meaningful if
  843. X   NEED_PUT_GETCHAR is defined.
  844. X*/
  845. X#define INITIAL_BAUD_RATE    (BAUD_BASE/9600)
  846. X
  847. X/* Initial modem control register.  This should probably not have to
  848. X   be touched.  It is here because some terminals used as the console
  849. X   require one or more of the modem signals set. It is only meaningful
  850. X   for asyputchar and asygetchar and they are only meaningful if
  851. X   NEED_PUT_GETCHAR is defined.
  852. X*/
  853. X#define INITIAL_MDM_CONTROL    0
  854. X
  855. X/****************************************************/
  856. X/* Nothing past this line should have to be changed */
  857. X/****************************************************/
  858. X
  859. X#define NUM_INT_VECTORS    32    /* number of possible int vectors, but
  860. X                   only the first eight are normally used
  861. X                */
  862. X
  863. X#define MAX_UNITS    16    /* we will only use that many units */
  864. X
  865. X/* Miscellaneous Constants */
  866. X
  867. X#define BAUD_BASE    (1843200 / 16)    /* 115200 bps */
  868. X#define HANGUP_DELAY    500        /* in milli-seconds */
  869. X#define HANGUP_TIME    1000        /* in milli-seconds */
  870. X#define RECOVER_TIME    30        /* in seconds */
  871. X#define BREAK_TIME    250        /* in milli-seconds */
  872. X#define EVENT_TIME    20        /* in milli-seconds */
  873. X#if defined (M_I286)
  874. X#define    RECV_BUFF_SIZE    1000        /* receiver ring buffer size (MAX) */
  875. X#define XMIT_BUFF_SIZE    500        /* transmitter ring buffer size */
  876. X#else
  877. X#if defined(FASI)    /* we'll make do with less */
  878. X#define    RECV_BUFF_SIZE    3500    /* receiver ring buffer size (MAX) */
  879. X#define XMIT_BUFF_SIZE    500    /* transmitter ring buffer size */
  880. X#else    /* FASI */
  881. X#define    RECV_BUFF_SIZE    5000    /* receiver ring buffer size (MAX) */
  882. X#define XMIT_BUFF_SIZE    2500    /* transmitter ring buffer size */
  883. X#endif    /* FASI */
  884. X#endif    /* M_I286 */
  885. X
  886. X#define RBS RECV_BUFF_SIZE
  887. X
  888. X#define SW_LOW_WATER    ((int)(RBS*0.5))    /* 50% MAX    sw flow control */
  889. X#define SW_HIGH_WATER    ((int)(RBS*0.8))    /* 80% MAX     trigger levels */
  890. X#if defined(FASI)    /* experiment */
  891. X#define HW_LOW_WATER    (RBS-300)    /* MAX - 300    hw flow control */
  892. X#define HW_HIGH_WATER    (RBS-100)    /* MAX - 100     trigger levels */
  893. X#else
  894. X#define HW_LOW_WATER    (RBS-500)    /* MAX - 500    hw flow control */
  895. X#define HW_HIGH_WATER    (RBS-300)    /* MAX - 300     trigger levels */
  896. X#endif
  897. X#define MAX_UNIX_FILL    (TTYHOG)    /* read buffer max UNIX fill level */
  898. X#define MAX_VPIX_FILL    64        /* read buffer max VP/ix fill level */
  899. X#define MIN_READ_CHUNK    32        /* must be <= MAX_????_FILL/2 */
  900. X#define MAX_MSI_CNT    1000        /* max modem status ints per second */
  901. X#define READ_PORT    0x0100        /* read command for fas_init_seq */
  902. X#define NO_FIFO        0x10000        /* force FIFOs off */
  903. X#define SOFT_INIT    0        /* init registers if cflag changed */
  904. X#define HARD_INIT    1        /* init registers w/o checking cflag */
  905. X#if defined (XENIX)
  906. X#define SPLWRK        spl5        /* SPL for character processing */
  907. X#define SPLINT        spl7        /* SPL to disable FAS interrupts */
  908. X#else
  909. X#define SPLWRK        spl6        /* SPL for character processing */
  910. X#define SPLINT        spltty        /* SPL to disable FAS interrupts */
  911. X#endif
  912. X
  913. X#if ((EVENT_TIME) * (HZ) / 1000) == 0
  914. X#undef EVENT_TIME
  915. X#define EVENT_TIME    (1000 / (HZ))
  916. X#endif
  917. X
  918. X#if (MAX_UNIX_FILL) > (TTYHOG)
  919. X#undef MAX_UNIX_FILL
  920. X#define MAX_UNIX_FILL    (TTYHOG)
  921. X#endif
  922. X
  923. X#if (MAX_VPIX_FILL) > (TTYHOG)
  924. X#undef MAX_VPIX_FILL
  925. X#define MAX_VPIX_FILL    (TTYHOG)
  926. X#endif
  927. X
  928. X#if (MIN_READ_CHUNK) > ((MAX_UNIX_FILL) / 2)
  929. X#undef MIN_READ_CHUNK
  930. X#define MIN_READ_CHUNK    ((MAX_UNIX_FILL) / 2)
  931. X#endif
  932. X
  933. X#if (MIN_READ_CHUNK) > ((MAX_VPIX_FILL) / 2)
  934. X#undef MIN_READ_CHUNK
  935. X#define MIN_READ_CHUNK    ((MAX_VPIX_FILL) / 2)
  936. X#endif
  937. X
  938. X#define MAX_INPUT_FIFO_SIZE    INPUT_NS_FIFO_SIZE
  939. X#define MAX_OUTPUT_FIFO_SIZE    OUTPUT_NS_FIFO_SIZE
  940. X
  941. X
  942. X/* Here are the modem control flags for the fas_modem array in space.c.
  943. X   They are arranged in three 8-bit masks which are combined to a 32-bit
  944. X   word. Each of these 32-bit words represents one entry in the fas_modem
  945. X   array.
  946. X
  947. X   The lowest byte is used as a mask to manipulate the modem control
  948. X   register for modem disable. Use the MC_* macros to build the mask.
  949. X
  950. X   The second lowest byte is used as a mask to manipulate the modem control
  951. X   register for modem enable during dialout. Use the MC_* macros to build
  952. X   the mask and shift them 8 bits to the left.
  953. X
  954. X   The second highest byte is used as a mask to manipulate the modem control
  955. X   register for modem enable during dialin. Use the MC_* macros to build
  956. X   the mask and shift them 16 bits to the left.
  957. X
  958. X   The highest byte is used to mask signals from the modem status
  959. X   register that will be used as the carrier detect signal. Use the MS_*
  960. X   macros to build the mask and shift them 24 bits to the left. If you use
  961. X   more than one signal, carrier is considered on only when all signals
  962. X   are on.
  963. X
  964. X   Here are some useful macros for the space.c file. You may create your
  965. X   own macros if you have some special requirements not met by the
  966. X   predefined ones.
  967. X*/
  968. X
  969. X/* modem disable (choose one) */
  970. X#define DI_RTS            MC_SET_RTS    /* RTS disables modem */
  971. X#define DI_DTR            MC_SET_DTR    /* DTR disables modem */
  972. X#define DI_RTS_AND_DTR        (MC_SET_RTS | MC_SET_DTR)
  973. X
  974. X/* modem enable for dialout (choose one) */
  975. X#define EO_RTS            (MC_SET_RTS << 8) /* RTS enables modem */
  976. X#define EO_DTR            (MC_SET_DTR << 8) /* DTR enables modem */
  977. X#define EO_RTS_AND_DTR        ((MC_SET_RTS | MC_SET_DTR) << 8)
  978. X
  979. X/* modem enable for dialin (choose one) */
  980. X#define EI_RTS            (MC_SET_RTS << 16) /* RTS enables modem */
  981. X#define EI_DTR            (MC_SET_DTR << 16) /* DTR enables modem */
  982. X#define EI_RTS_AND_DTR        ((MC_SET_RTS | MC_SET_DTR) << 16)
  983. X
  984. X/* carrier detect signal (choose one) */
  985. X#define CA_DCD            (MS_DCD_PRESENT << 24) /* DCD is carr. detect */
  986. X#define CA_CTS            (MS_CTS_PRESENT << 24) /* CTS is carr. detect */
  987. X#define CA_DSR            (MS_DSR_PRESENT << 24) /* DSR is carr. detect */
  988. X
  989. X
  990. X/* Here are the hardware handshake flags for the fas_flow array in space.c.
  991. X   They are arranged in three 8-bit masks which are combined to a 32-bit
  992. X   word. Each of these 32-bit words represents one entry in the fas_flow
  993. X   array.
  994. X
  995. X   The lowest byte is used as a mask to manipulate the modem control
  996. X   register for input flow control. Use the MC_* macros to build the mask.
  997. X
  998. X   The second lowest byte is used to mask signals from the modem status
  999. X   register that will be used for output flow control. Use the MS_* macros
  1000. X   to build the mask and shift them 8 bits to the left. If you use more
  1001. X   than one signal, output is allowed only when all signals are on.
  1002. X
  1003. X   The second highest byte is used to mask signals from the modem status
  1004. X   register that will be used to enable the output flow control selected
  1005. X   by the second lowest byte. Use the MS_* macros to build the mask and
  1006. X   shift them 16 bits to the left. If you use more than one signal, output
  1007. X   flow control is enabled only when all signals are on.
  1008. X
  1009. X   The highest byte is used as a mask to manipulate the modem control
  1010. X   register for output half duplex flow control. Use the MC_* macros to
  1011. X   build the mask and shift them 24 bits to the left.
  1012. X
  1013. X   Here are some useful macros for the space.c file. You may create your
  1014. X   own macros if you have some special requirements not met by the
  1015. X   predefined ones.
  1016. X*/
  1017. X
  1018. X/* input flow control (choose one) */
  1019. X#define HI_RTS            MC_SET_RTS    /* RTS input flow ctrl */
  1020. X#define HI_DTR            MC_SET_DTR    /* DTR input flow ctrl */
  1021. X#define HI_RTS_AND_DTR        (MC_SET_RTS | MC_SET_DTR)
  1022. X
  1023. X/* output flow control (choose one) */
  1024. X#define HO_CTS            (MS_CTS_PRESENT << 8) /* CTS output flow ctrl */
  1025. X#define HO_DSR            (MS_DSR_PRESENT << 8) /* DSR output flow ctrl */
  1026. X#define HO_CTS_AND_DSR        ((MS_CTS_PRESENT | MS_DSR_PRESENT) << 8)
  1027. X#define HO_CTS_ON_DSR        ((MS_CTS_PRESENT << 8) | (MS_DSR_PRESENT << 16))
  1028. X#define HO_CTS_ON_DSR_AND_DCD    ((MS_CTS_PRESENT << 8) \
  1029. X                | ((MS_DSR_PRESENT | MS_DCD_PRESENT) << 16))
  1030. X
  1031. X/* output hdx flow control (choose one) */
  1032. X#define HX_RTS            (MC_SET_RTS << 24) /* RTS hdx flow ctrl */
  1033. X#define HX_DTR            (MC_SET_DTR << 24) /* DTR hdx flow ctrl */
  1034. X#define HX_RTS_AND_DTR        ((MC_SET_RTS | MC_SET_DTR) << 24)
  1035. X
  1036. X
  1037. X/* define the local open flags */
  1038. X
  1039. X#define OS_DEVICE_CLOSED    0x0000
  1040. X#define OS_OPEN_FOR_DIALOUT    0x0001
  1041. X#define OS_OPEN_FOR_GETTY    0x0002
  1042. X#define OS_WAIT_OPEN        0x0004
  1043. X#define OS_NO_DIALOUT        0x0008
  1044. X#define OS_FAKE_CARR_ON        0x0010
  1045. X#define OS_CLOCAL        0x0020
  1046. X#define OS_HWO_HANDSHAKE    0x0040
  1047. X#define OS_HWI_HANDSHAKE    0x0080
  1048. X#define OS_HDX_HANDSHAKE    0x0100
  1049. X#define OS_EXCLUSIVE_OPEN_1    0x0200
  1050. X#define OS_EXCLUSIVE_OPEN_2    0x0400    /* SYSV 3.2 Xenix compatibility */
  1051. X
  1052. X#define OS_OPEN_STATES        (OS_OPEN_FOR_DIALOUT | OS_OPEN_FOR_GETTY)
  1053. X#define OS_TEST_MASK        (OS_OPEN_FOR_DIALOUT | OS_NO_DIALOUT \
  1054. X                | OS_FAKE_CARR_ON | OS_CLOCAL \
  1055. X                | OS_HWO_HANDSHAKE | OS_HWI_HANDSHAKE \
  1056. X                | OS_HDX_HANDSHAKE | OS_EXCLUSIVE_OPEN_1 \
  1057. X                | OS_EXCLUSIVE_OPEN_2)
  1058. X#define OS_SU_TEST_MASK        (OS_OPEN_FOR_DIALOUT | OS_NO_DIALOUT \
  1059. X                | OS_FAKE_CARR_ON | OS_CLOCAL \
  1060. X                | OS_HWO_HANDSHAKE | OS_HWI_HANDSHAKE \
  1061. X                | OS_HDX_HANDSHAKE | OS_EXCLUSIVE_OPEN_1)
  1062. X
  1063. X/* define the device status flags */
  1064. X
  1065. X#define DF_DEVICE_CONFIGURED    0x0001    /* device is configured */
  1066. X#define DF_DEVICE_IS_NS16550A    0x0002    /* it's an NS16550A */
  1067. X#define DF_DEVICE_IS_I82510    0x0004    /* it's an I82510 */
  1068. X#define DF_CTL_FIRST        0x0008    /* write ctl port at first access */
  1069. X#define DF_CTL_EVERY        0x0010    /* write ctl port at every access */
  1070. X#define DF_DEVICE_OPEN        0x0020    /* physical device is open */
  1071. X#define DF_DEVICE_LOCKED    0x0040    /* physical device locked */
  1072. X#define DF_MODEM_ENABLED    0x0080    /* modem enabled */
  1073. X#define DF_XMIT_BUSY        0x0100    /* transmitter busy */
  1074. X#define DF_XMIT_BREAK        0x0200    /* transmitter sends break */
  1075. X#define DF_XMIT_LOCKED        0x0400    /* transmitter locked against output */
  1076. X#define DF_DO_HANGUP        0x0800    /* delayed hangup request */
  1077. X#define DF_DO_BREAK        0x1000    /* delayed break request */
  1078. X#define DF_GUARD_TIMEOUT    0x2000    /* protect last char from corruption */
  1079. X#define DF_NS16550A_DROP_MODE    0x4000    /* receiver trigger level is dropped */
  1080. X
  1081. X/* define the flow control status flags */
  1082. X
  1083. X#define FF_HWO_HANDSHAKE    0x0001    /* output hw handshake enabled */
  1084. X#define FF_HWI_HANDSHAKE    0x0002    /* input hw handshake enabled */
  1085. X#define FF_HDX_HANDSHAKE    0x0004    /* output hdx hw handshake enabled */
  1086. X#define    FF_HWO_STOPPED        0x0008    /* output stopped by hw handshake */
  1087. X#define FF_HWI_STOPPED        0x0010    /* input stopped by hw handshake */
  1088. X#define FF_HDX_STARTED        0x0020    /* output buffer contains characters */
  1089. X#define FF_SWO_STOPPED        0x0040    /* output stopped by sw flow control */
  1090. X#define FF_SWI_STOPPED        0x0080    /* input stopped by sw flow control */
  1091. X#define FF_SW_FC_REQ        0x0100    /* sw input flow control request */
  1092. X#define FF_RXFER_STOPPED    0x0200    /* rxfer function stopped */
  1093. X
  1094. X/* define the scheduled events flags */
  1095. X
  1096. X#define EF_DO_RXFER        0x0001    /* rxfer function request */
  1097. X#define EF_DO_XXFER        0x0002    /* xxfer function request */
  1098. X#define EF_DO_BRKINT        0x0004    /* break int request */
  1099. X#define EF_DO_MPROC        0x0008    /* mproc function request */
  1100. X#define EF_SIGNAL_VPIX        0x0010    /* send pseudorupt to VP/ix */
  1101. X
  1102. X/* define an easy way to reference the port structures */
  1103. X
  1104. X#define RCV_DATA_PORT        (fip->port_0)
  1105. X#define XMT_DATA_PORT        (fip->port_0)
  1106. X#define INT_ENABLE_PORT        (fip->port_1)
  1107. X#define INT_ID_PORT        (fip->port_2)
  1108. X#define NS_FIFO_CTL_PORT    (fip->port_2)
  1109. X#define I_BANK_PORT        (fip->port_2)
  1110. X#define LINE_CTL_PORT        (fip->port_3)
  1111. X#define MDM_CTL_PORT        (fip->port_4)
  1112. X#define I_IDM_PORT        (fip->port_4)
  1113. X#define LINE_STATUS_PORT    (fip->port_5)
  1114. X#define I_RCM_PORT        (fip->port_5)
  1115. X#define MDM_STATUS_PORT        (fip->port_6)
  1116. X#define I_TCM_PORT        (fip->port_6)
  1117. X#define DIVISOR_LSB_PORT    (fip->port_0)
  1118. X#define DIVISOR_MSB_PORT    (fip->port_1)
  1119. X#define CTL_PORT        (fip->ctl_port)
  1120. X
  1121. X/* modem control port */
  1122. X
  1123. X#define MC_SET_DTR        0x01
  1124. X#define MC_SET_RTS        0x02
  1125. X#define MC_SET_OUT1        0x04
  1126. X#define MC_SET_OUT2        0x08    /* tristates int line when false */
  1127. X#define MC_SET_LOOPBACK        0x10
  1128. X
  1129. X#define MC_ANY_CONTROL    (MC_SET_DTR | MC_SET_RTS)
  1130. X
  1131. X/* modem status port */
  1132. X
  1133. X#define MS_CTS_DELTA        0x01
  1134. X#define MS_DSR_DELTA        0x02
  1135. X#define MS_RING_TEDGE        0x04
  1136. X#define MS_DCD_DELTA        0x08
  1137. X#define MS_CTS_PRESENT        0x10
  1138. X#define MS_DSR_PRESENT        0x20
  1139. X#define MS_RING_PRESENT        0x40
  1140. X#define MS_DCD_PRESENT        0x80
  1141. X
  1142. X#define MS_ANY_DELTA    (MS_CTS_DELTA | MS_DSR_DELTA | MS_RING_TEDGE \
  1143. X                | MS_DCD_DELTA)
  1144. X#define MS_ANY_PRESENT    (MS_CTS_PRESENT | MS_DSR_PRESENT | MS_RING_PRESENT \
  1145. X                | MS_DCD_PRESENT)
  1146. X
  1147. X/* interrupt enable port */
  1148. X
  1149. X#define IE_NONE                0x00
  1150. X#define    IE_RECV_DATA_AVAILABLE        0x01
  1151. X#define    IE_XMIT_HOLDING_BUFFER_EMPTY    0x02
  1152. X#define IE_LINE_STATUS            0x04
  1153. X#define IE_MODEM_STATUS            0x08
  1154. X
  1155. X#define IE_INIT_MODE    (IE_RECV_DATA_AVAILABLE | IE_XMIT_HOLDING_BUFFER_EMPTY \
  1156. X            | IE_LINE_STATUS | IE_MODEM_STATUS)
  1157. X
  1158. X/* interrupt id port */
  1159. X
  1160. X#define II_NO_INTS_PENDING    0x01
  1161. X#define II_CODE_MASK        0x07
  1162. X#define II_MODEM_STATE        0x00
  1163. X#define II_XMTD_CHAR        0x02
  1164. X#define II_RCVD_CHAR        0x04
  1165. X#define II_RCV_ERROR        0x06
  1166. X#define II_NS_FIFO_TIMEOUT    0x08
  1167. X#define II_NS_FIFO_ENABLED    0xC0
  1168. X
  1169. X/* line control port */
  1170. X
  1171. X#define    LC_WORDLEN_MASK        0x03
  1172. X#define    LC_WORDLEN_5        0x00
  1173. X#define    LC_WORDLEN_6        0x01
  1174. X#define    LC_WORDLEN_7        0x02
  1175. X#define    LC_WORDLEN_8        0x03
  1176. X#define LC_STOPBITS_LONG    0x04
  1177. X#define LC_ENABLE_PARITY    0x08
  1178. X#define LC_EVEN_PARITY        0x10
  1179. X#define LC_STICK_PARITY        0x20
  1180. X#define LC_SET_BREAK_LEVEL    0x40
  1181. X#define LC_ENABLE_DIVISOR    0x80
  1182. X
  1183. X/* line status port */
  1184. X
  1185. X#define LS_RCV_AVAIL        0x01
  1186. X#define LS_OVERRUN        0x02
  1187. X#define LS_PARITY_ERROR        0x04
  1188. X#define LS_FRAMING_ERROR    0x08
  1189. X#define LS_BREAK_DETECTED    0x10
  1190. X#define LS_XMIT_AVAIL        0x20
  1191. X#define LS_XMIT_COMPLETE    0x40
  1192. X#define LS_ERROR_IN_NS_FIFO    0x80    /* NS16550A only */
  1193. X#define LS_RCV_INT    (LS_RCV_AVAIL | LS_OVERRUN | LS_PARITY_ERROR \
  1194. X            | LS_FRAMING_ERROR | LS_BREAK_DETECTED)
  1195. X
  1196. X/* fifo control port (NS16550A only) */
  1197. X
  1198. X#define    NS_FIFO_ENABLE        0x01
  1199. X#define    NS_FIFO_CLR_RECV    0x02
  1200. X#define    NS_FIFO_CLR_XMIT    0x04
  1201. X#define    NS_FIFO_START_DMA    0x08
  1202. X#define NS_FIFO_SIZE_1        0x00
  1203. X#define NS_FIFO_SIZE_4        0x40
  1204. X#define NS_FIFO_SIZE_8        0x80
  1205. X#define NS_FIFO_SIZE_14        0xC0
  1206. X#define NS_FIFO_SIZE_MASK    0xC0
  1207. X
  1208. X#define NS_FIFO_CLEAR_CMD    0
  1209. X#define NS_FIFO_DROP_CMD    (NS_FIFO_SIZE_1 | NS_FIFO_ENABLE)
  1210. X#define NS_FIFO_SETUP_CMD    (NS_FIFO_SIZE_4 | NS_FIFO_ENABLE)
  1211. X#define NS_FIFO_INIT_CMD    (NS_FIFO_SETUP_CMD | NS_FIFO_CLR_RECV \
  1212. X                | NS_FIFO_CLR_XMIT)
  1213. X
  1214. X#define INPUT_NS_FIFO_SIZE    16
  1215. X#define OUTPUT_NS_FIFO_SIZE    16
  1216. X
  1217. X/* fifo control ports (i82510 only) */
  1218. X
  1219. X#define I_BANK_0        0x00
  1220. X#define I_BANK_1        0x20
  1221. X#define I_BANK_2        0x40
  1222. X#define I_BANK_3        0x60
  1223. X#define I_FIFO_ENABLE        0x08
  1224. X#define I_FIFO_CLR_RECV        0x30
  1225. X#define I_FIFO_CLR_XMIT        0x0c
  1226. X
  1227. X#define I_FIFO_CLEAR_CMD    0
  1228. X#define I_FIFO_SETUP_CMD    I_FIFO_ENABLE
  1229. X
  1230. X#define INPUT_I_FIFO_SIZE    4
  1231. X#define OUTPUT_I_FIFO_SIZE    4
  1232. X
  1233. X/* defines for ioctl calls (VP/ix) */
  1234. X
  1235. X#define AIOC            ('A'<<8)
  1236. X#define AIOCINTTYPE        (AIOC|60)    /* set interrupt type */
  1237. X#define AIOCDOSMODE        (AIOC|61)    /* set DOS mode */
  1238. X#define AIOCNONDOSMODE        (AIOC|62)    /* reset DOS mode */
  1239. X#define AIOCSERIALOUT        (AIOC|63)    /* serial device data write */
  1240. X#define AIOCSERIALIN        (AIOC|64)    /* serial device data read */
  1241. X#define AIOCSETSS        (AIOC|65)    /* set start/stop chars */
  1242. X#define AIOCINFO        (AIOC|66)    /* tell us what device we are */
  1243. X
  1244. X/* ioctl alternate names used by VP/ix */
  1245. X
  1246. X#define VPC_SERIAL_DOS        AIOCDOSMODE
  1247. X#define VPC_SERIAL_NONDOS    AIOCNONDOSMODE
  1248. X#define VPC_SERIAL_INFO        AIOCINFO
  1249. X#define VPC_SERIAL_OUT        AIOCSERIALOUT
  1250. X#define VPC_SERIAL_IN        AIOCSERIALIN
  1251. X
  1252. X#if defined(FASI)
  1253. X#define FASIC            ('~' << 8)
  1254. X#define FASIC_SIP        (FASIC | 16)    /* get entire fas_info struct */
  1255. X#define FASIC_SIP_CHANGE    (FASIC | 17)    /* get entire fas_info struct
  1256. X                         * after wait for change */
  1257. X#define FASIC_MSR        (FASIC | 18)    /* get various registers */
  1258. X#define FASIC_LCR        (FASIC | 19)
  1259. X#define FASIC_IER        (FASIC | 20)
  1260. X#define FASIC_MCR        (FASIC | 21)
  1261. X#define FASIC_DVR_IDENT        (FASIC | 22)    /* get driver revision */
  1262. X#define FASIC_SPACE_IDENT    (FASIC | 23)    /* get space.c revision */
  1263. X#define FASIC_RESET_STAT    (FASIC | 24)    /* reset statistics */
  1264. X#endif /* FASI */
  1265. X
  1266. X/* serial in/out requests */
  1267. X
  1268. X#define SO_DIVLLSB        1
  1269. X#define SO_DIVLMSB        2
  1270. X#define SO_LCR            3
  1271. X#define SO_MCR            4
  1272. X#define SI_MSR            1
  1273. X#define SIO_MASK(x)        (1<<((x)-1))
  1274. X
  1275. X
  1276. X/* This structure contains everything one would like to know about
  1277. X   an open device.  There is one of it for each physical unit.
  1278. X
  1279. X   We use several unions to eliminate most integer type conversions
  1280. X   at run-time. The standard UNIX V 3.X/386 C compiler forces all
  1281. X   operands in expressions and all function parameters to type int.
  1282. X   To save some time, with the means of unions we deliver type int
  1283. X   at the proper locations while dealing with the original type
  1284. X   wherever int would be slower.
  1285. X
  1286. X   This is highly compiler implementation specific. But for the sake
  1287. X   of speed the end justifies the means.
  1288. X
  1289. X   Take care that the size of the area that contains the various
  1290. X   structure fields (up to, but excluding the ring buffers)
  1291. X   is <= 128 bytes. Otherwise a 4-byte offset is used to access
  1292. X   some of the structure fields. For the first 128 bytes a 1-byte
  1293. X   offset is used, which is faster.
  1294. X*/
  1295. X
  1296. Xstruct    fas_info
  1297. X{
  1298. X    struct    tty    *tty;    /* the tty structure */
  1299. X    struct    fas_info *prev_int_user;/* link to previous fas_info struct */
  1300. X    struct    fas_info *next_int_user;/* link to next fas_info struct */
  1301. X    int    timeout_idx;    /* timeout index for untimeout () */
  1302. X    uint    iflag;        /* current terminal input flags */
  1303. X    uint    cflag;        /* current terminal hardware control flags */
  1304. X    union {            /* flags about the device state */
  1305. X        ushort    s;
  1306. X        uint    i;
  1307. X    } device_flags;
  1308. X    union {            /* flags about the flow control state */
  1309. X        ushort    s;
  1310. X        uint    i;
  1311. X    } flow_flags;
  1312. X    union {            /* flags about the scheduled events */
  1313. X        ushort    s;
  1314. X        uint    i;
  1315. X    } event_flags;
  1316. X    uint    o_state;    /* current open state */
  1317. X    uint    po_state;    /* previous open state */
  1318. X    union {            /* modem control masks */
  1319. X        struct {
  1320. X            unchar    di;    /* mask for modem disable */
  1321. X            unchar    eo;    /* mask for modem enable (dialout) */
  1322. X            unchar    ei;    /* mask for modem enable (dialin) */
  1323. X            unchar    ca;    /* mask for carrier detect */
  1324. X        } m;
  1325. X        ulong    l;
  1326. X    } modem;
  1327. X    union {            /* hardware flow control masks */
  1328. X        struct {
  1329. X            unchar    ic;    /* control mask for inp. flow ctrl */
  1330. X            unchar    oc;    /* control mask for outp. flow ctrl */
  1331. X            unchar    oe;    /* enable mask for outp. flow ctrl */
  1332. X            unchar    hc;    /* control mask for hdx flow ctrl */
  1333. X        } m;
  1334. X        ulong    l;
  1335. X    } flow;
  1336. X    unchar    msr;        /* modem status register value */
  1337. X    unchar    new_msr;    /* new modem status register value */
  1338. X    unchar    mcr;        /* modem control register value */
  1339. X    unchar    lcr;        /* line control register value */
  1340. X    unchar    ier;        /* interrupt enable register value */
  1341. X    unchar    vec;        /* interrupt vector for this struct */
  1342. X    unchar    msi_cnt;    /* modem status interrupt counter */
  1343. X#if defined (HAVE_VPIX)
  1344. X    unchar    v86_intmask;    /* VP/ix pseudorupt mask */
  1345. X    v86_t    *v86_proc;    /* VP/ix v86proc pointer for pseudorupts */
  1346. X    struct termss    v86_ss;    /* VP/ix start/stop characters */
  1347. X#endif
  1348. X    uint    ctl_port;    /* muliplexer control port */
  1349. X    union {            /* uart port addresses and control values */
  1350. X        uint    addr;
  1351. X        struct {
  1352. X            ushort    addr;
  1353. X            unchar    ctl;
  1354. X        } p;
  1355. X    } port_0, port_1, port_2, port_3, port_4, port_5, port_6;
  1356. X    uint    recv_ring_cnt;    /* receiver ring buffer counter */
  1357. X    unchar    *recv_ring_put_ptr;    /* recv ring buf put ptr */
  1358. X    unchar    *recv_ring_take_ptr;    /* recv ring buf take ptr */
  1359. X    ushort    xmit_fifo_size;    /* transmitter FIFO size */
  1360. X    ushort    xmit_ring_size;    /* transmitter ring buffer size */
  1361. X    uint    xmit_ring_cnt;    /* transmitter ring buffer counter */
  1362. X    unchar    *xmit_ring_put_ptr;    /* xmit ring buf put ptr */
  1363. X    unchar    *xmit_ring_take_ptr;    /* xmit ring buf take ptr */
  1364. X#if defined(FASI)
  1365. X    unsigned long characters_received;
  1366. X    unsigned long characters_transmitted;
  1367. X    unsigned long modem_status_events;
  1368. X    unsigned long overrun_errors;
  1369. X    unsigned long framing_errors;
  1370. X    unsigned long parity_errors;
  1371. X    unsigned long rings_detected;
  1372. X    unsigned long breaks_detected;
  1373. X    unsigned long xmtr_hw_flow_count;
  1374. X    unsigned long xmtr_sw_flow_count;
  1375. X    unsigned long rcvr_hw_flow_count;
  1376. X    unsigned long rcvr_sw_flow_count;
  1377. X#endif /* FASI */
  1378. X    unchar    recv_buffer [RECV_BUFF_SIZE];    /* recv ring buf */
  1379. X    unchar    xmit_buffer [XMIT_BUFF_SIZE];    /* xmit ring buf */
  1380. X};
  1381. X
  1382. X#if defined(FASI)
  1383. Xstruct fas_name
  1384. X{
  1385. X    char name[8];
  1386. X};
  1387. X#endif
  1388. SHAR_EOF
  1389. chmod 0644 fasi/fas.h ||
  1390. echo 'restore of fasi/fas.h failed'
  1391. Wc_c="`wc -c < 'fasi/fas.h'`"
  1392. test 21859 -eq "$Wc_c" ||
  1393.     echo 'fasi/fas.h: original size 21859, current size' "$Wc_c"
  1394. rm -f _shar_wnt_.tmp
  1395. fi
  1396. # ============= ckermit/ckutio-ecu.dif ==============
  1397. if test ! -d 'ckermit'; then
  1398.     echo 'x - creating directory ckermit'
  1399.     mkdir 'ckermit'
  1400. fi
  1401. if test -f 'ckermit/ckutio-ecu.dif' -a X"$1" != X"-c"; then
  1402.     echo 'x - skipping ckermit/ckutio-ecu.dif (File already exists)'
  1403.     rm -f _shar_wnt_.tmp
  1404. else
  1405. > _shar_wnt_.tmp
  1406. echo 'x - extracting ckermit/ckutio-ecu.dif (Text)'
  1407. sed 's/^X//' << 'SHAR_EOF' > 'ckermit/ckutio-ecu.dif' &&
  1408. X0a1,5
  1409. X> #define ECU_MODS
  1410. X> #ifdef ECU_MODS
  1411. X> char *ckxv = "Unix tty I/O, 4F(056)/ecu mods by wht@n4hgf, 14 Jul 91";
  1412. X> static int ecu_calling = 0;
  1413. X> #else
  1414. X1a7,9
  1415. X> #endif
  1416. X> /*+:EDITS:*/
  1417. X> /*:07-14-1991-15:46-wht@n4hgf-ECU mods for 4F */
  1418. X645a654,655
  1419. X> /****** b e f o r e ****************************************************/
  1420. X> #ifndef ECU_MODS
  1421. X665a676,724
  1422. X> #endif
  1423. X> 
  1424. X> /****** a f t e r ******************************************************/
  1425. X> #ifdef ECU_MODS
  1426. X>     if(isdigit(*ttname))
  1427. X>     {
  1428. X>         xlocal = *lcl = 1;  /* force local if fd passed to program */
  1429. X>         debug(F111,"ttopen numeric ttname, new local",ttname,xlocal);
  1430. X>         ttyfd = atoi(ttname);
  1431. X>         debug(F101,"ttyfd passed as numeric=","",ttyfd);
  1432. X>         ecu_calling = 1;
  1433. X> /* Get tty device settings */
  1434. X> #ifndef UXIII
  1435. X>         gtty(ttyfd,&ttold);         /* Get sgtty info */
  1436. X>         gtty(ttyfd,&ttraw);         /* And a copy of it for packets*/
  1437. X>         gtty(ttyfd,&tttvt);         /* And one for virtual tty service */
  1438. X> #else
  1439. X>         ioctl(ttyfd,TCGETA,&ttold);     /* Same deal for Sys III, Sys V */
  1440. X>         ioctl(ttyfd,TCGETA,&ttraw);
  1441. X>         ioctl(ttyfd,TCGETA,&tttvt);
  1442. X> #endif /* not uxiii */
  1443. X>         return(0);
  1444. X>     }
  1445. X>     else
  1446. X>     {
  1447. X> #ifdef UXIII
  1448. X> #ifdef ATT7300
  1449. X>     /*
  1450. X>      Open comms line without waiting for carrier so initial call does not hang
  1451. X>      because state of "modem" is likely unknown at the initial call  -jrd.
  1452. X>     */
  1453. X>         ttyfd = open(ttname,O_RDWR | O_NDELAY);
  1454. X> #else
  1455. X>         ttyfd = open(ttname,O_RDWR | (modem ? O_NDELAY : 0) );
  1456. X> #endif  /* att7300 */
  1457. X> #else   /* not uxiii */
  1458. X> #ifdef O_NDELAY
  1459. X>         ttyfd = open(ttname,O_RDWR | (modem ? O_NDELAY : 0) );
  1460. X> #else  /* O_NDELAY not defined */
  1461. X>         ttyfd = open(ttname,2);
  1462. X> #endif /* O_NDELAY */
  1463. X> #endif /* uxiii */
  1464. X>         debug(F111,"ttopen","modem",modem);
  1465. X>         debug(F101," ttyfd","",ttyfd);
  1466. X> 
  1467. X>      }
  1468. X> #endif /* ECU_MODS */
  1469. X> /***********************************************************************/
  1470. X> 
  1471. X849a909,916
  1472. X> #ifdef ECU_MODS
  1473. X>     if(ecu_calling)
  1474. X>     {
  1475. X>         debug(F101,"ttclos disabled for ecu","",0);
  1476. X>         return(0);
  1477. X>     }
  1478. X> #endif
  1479. X> 
  1480. X903a971,978
  1481. X> #endif
  1482. X> 
  1483. X> #ifdef ECU_MODS
  1484. X>     if(ecu_calling)
  1485. X>     {
  1486. X>         debug(F101,"tthang disabled for ecu","",0);
  1487. X>         return(0);
  1488. X>     }
  1489. SHAR_EOF
  1490. chmod 0644 ckermit/ckutio-ecu.dif ||
  1491. echo 'restore of ckermit/ckutio-ecu.dif failed'
  1492. Wc_c="`wc -c < 'ckermit/ckutio-ecu.dif'`"
  1493. test 2337 -eq "$Wc_c" ||
  1494.     echo 'ckermit/ckutio-ecu.dif: original size 2337, current size' "$Wc_c"
  1495. rm -f _shar_wnt_.tmp
  1496. fi
  1497. # ============= memmove/README ==============
  1498. if test ! -d 'memmove'; then
  1499.     echo 'x - creating directory memmove'
  1500.     mkdir 'memmove'
  1501. fi
  1502. if test -f 'memmove/README' -a X"$1" != X"-c"; then
  1503.     echo 'x - skipping memmove/README (File already exists)'
  1504.     rm -f _shar_wnt_.tmp
  1505. else
  1506. > _shar_wnt_.tmp
  1507. echo 'x - extracting memmove/README (Text)'
  1508. sed 's/^X//' << 'SHAR_EOF' > 'memmove/README' &&
  1509. XThis memmove is courtesy of Chip Salzenberg with some hel,p from
  1510. XRoger Cornelius.  I hacked out the .asm versions.
  1511. X
  1512. XChip Salzenberg:
  1513. X> SCO's memmove() function in the 3.2v2 development system libc.a
  1514. X> library has an insidious bug: it trashes the EBX register.  This
  1515. X> register is used to hold register variables.  I suspect the bug crept
  1516. X> in due to a simple-minded translation of a '286 routine, because on
  1517. X> the '286, BX need not be preserved.
  1518. X> 
  1519. X> The fix is to replace memmove.o in /lib/libc.a with the version
  1520. X> included below.  Note that if you use profiling, you must also put a
  1521. X> profiling version of memmove() in /usr/lib/libp/libc.a.
  1522. X> 
  1523. X> To assemble the non-profiling version:
  1524. X> 
  1525. X>     as -m -o memmove.o memmove.s
  1526. X
  1527. X(How strange that this bug has gone unnoticed for so long...)
  1528. X
  1529. XRoger Cornelius <rac@sherpa.UUCP> :
  1530. X> The following will build the profiling memmove.o correctly:
  1531. X> 
  1532. X> m4 profile.s memmove.s > memmove_p.s    # order is important!
  1533. X> as -o memmove_p.o memmove_p.s
  1534. X> 
  1535. X> Note also that manually running memmove.s through m4 (instead of
  1536. X> using as -m) before assembling will also save 100 or so bytes in the
  1537. X> .o file for the non-profiling version.
  1538. SHAR_EOF
  1539. chmod 0664 memmove/README ||
  1540. echo 'restore of memmove/README failed'
  1541. Wc_c="`wc -c < 'memmove/README'`"
  1542. test 1169 -eq "$Wc_c" ||
  1543.     echo 'memmove/README: original size 1169, current size' "$Wc_c"
  1544. rm -f _shar_wnt_.tmp
  1545. fi
  1546. # ============= memmove/memmove.s ==============
  1547. if test -f 'memmove/memmove.s' -a X"$1" != X"-c"; then
  1548.     echo 'x - skipping memmove/memmove.s (File already exists)'
  1549.     rm -f _shar_wnt_.tmp
  1550. else
  1551. > _shar_wnt_.tmp
  1552. echo 'x - extracting memmove/memmove.s (Text)'
  1553. sed 's/^X//' << 'SHAR_EOF' > 'memmove/memmove.s' &&
  1554. X/+------------------------------------------------------------------
  1555. X/ memmove.s
  1556. X/
  1557. X/ $Id: memmove.s,v 1.3 1991/06/05 19:15:44 chip Exp $
  1558. X/
  1559. X/ Implementation of memmove(), which is inexplicably missing
  1560. X/ from the SCO Unix C library.
  1561. X/
  1562. X/ for profiling version,
  1563. X/ m4 profile.s memmove.s > memmove_p.s  # order is important!
  1564. X/ as -o memmove_p.o memmove_p.s
  1565. X/ 
  1566. X/ Note also that manually running memmove.s through m4 (instead of
  1567. X/ using as -m) before assembling will also save 100 or so bytes in
  1568. X/ the .o file for the non-profiling version.
  1569. X/ 
  1570. X/-------------------------------------------------------------------
  1571. X
  1572. X    .globl    memmove
  1573. Xmemmove:
  1574. Xifdef(`PROFILE',`
  1575. X    .bss
  1576. X.L1:    .=.+4
  1577. X    .text
  1578. X    mov    $.L1,%edx
  1579. SHAR_EOF
  1580. true || echo 'restore of memmove/memmove.s failed'
  1581. fi
  1582. echo 'End of ecu/patch05 part 4'
  1583. echo 'File memmove/memmove.s is continued in part 5'
  1584. echo 5 > _shar_seq_.tmp
  1585. exit 0
  1586.  
  1587. exit 0 # Just in case...
  1588.